package com.kk.threadpool.control;

import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@RestController
public class HelloControl {

    /**
     * java 线程池模拟拒绝
     */
    /**
     *         1，在方法上使用该@Async注解，申明该方法是一个异步任务；
     *
     *         2，在类上面使用该@Async注解，申明该类中的所有方法都是异步任务；
     *
     *         3，使用此注解的方法的类对象，必须是spring管理下的bean对象；
     *
     *         4，要想使用异步任务，需要在主类上开启异步配置，即，配置上@EnableAsync注解；
     * @return
     */
    @RequestMapping("/1")
    @Async
    public String s() {
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LoggerFactory.getLogger(HelloControl.class).info("Hello World! 1");
        return "ok";
    }


    /**
     * spring 线程池模拟拒绝
     */
    @Qualifier("threadPoolExecutor")
    @Autowired
    private ThreadPoolExecutor executor;
    @RequestMapping("/2")
    public String ss() {
        executor.execute(() -> {
            LoggerFactory.getLogger(HelloControl.class).info("Hello World! 2");
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        return "ok";
    }


}
